package com.zt.controller;

import com.zt.common.Result;
import com.zt.entity.Admin;
import com.zt.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * 个人信息管理控制器
 * @author 周明震
 * @date 2025/7/21
 */
@RestController
@RequestMapping("/api/profile")
public class ProfileController {

    @Autowired
    private AdminService adminService;

    // 密码加密盐值，与AdminServiceImpl保持一致
    private static final String SALT = "tutoradmin";

    /**
     * 获取个人信息
     */
    @GetMapping("/info")
    public Result getProfile() {
        try {
            // 这里应该从JWT token中获取当前用户ID，暂时使用固定ID
            Integer adminId = 11; // 实际应该从SecurityContext或JWT中获取

            Admin admin = adminService.getById(adminId);
            if (admin == null) {
                return Result.error("用户不存在");
            }

            // 不返回密码信息
            admin.setPassword(null);

            // 确保字段不为null - 设置默认值
            if (admin.getEmail() == null) {
                admin.setEmail(""); // 邮箱默认为空
            }

            // 注意：nickname、phone、avatar字段在数据库中不存在，已从实体类中移除

            return Result.success("获取成功", admin);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("获取个人信息失败：" + e.getMessage());
        }
    }

    /**
     * 更新个人信息
     */
    @PutMapping("/update")
    public Result updateProfile(@RequestBody Map<String, Object> params) {
        try {
            // 这里应该从JWT token中获取当前用户ID，暂时使用固定ID
            Integer adminId = 11; // 实际应该从SecurityContext或JWT中获取
            
            Admin admin = adminService.getById(adminId);
            if (admin == null) {
                return Result.error("用户不存在");
            }

            // 更新基本信息
            if (params.containsKey("username")) {
                String username = (String) params.get("username");
                if (username == null || username.trim().isEmpty()) {
                    return Result.error("用户名不能为空");
                }
                admin.setUsername(username.trim());
            }

            if (params.containsKey("email")) {
                String email = (String) params.get("email");
                if (email != null && !email.trim().isEmpty()) {
                    // 简单的邮箱格式验证
                    if (!email.matches("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$")) {
                        return Result.error("邮箱格式不正确");
                    }
                }
                admin.setEmail(email);
            }

            // 注意：phone、avatar、nickname字段在数据库中不存在，暂时注释掉
            // 如果需要这些字段，需要先在数据库中添加相应的列
            /*
            if (params.containsKey("phone")) {
                String phone = (String) params.get("phone");
                if (phone != null && !phone.trim().isEmpty()) {
                    // 简单的手机号格式验证
                    if (!phone.matches("^1[3-9]\\d{9}$")) {
                        return Result.error("手机号格式不正确");
                    }
                }
                admin.setPhone(phone);
            }

            if (params.containsKey("avatar")) {
                admin.setAvatar((String) params.get("avatar"));
            }

            if (params.containsKey("nickname")) {
                admin.setNickname((String) params.get("nickname"));
            }
            */

            boolean result = adminService.updateById(admin);
            if (result) {
                // 不返回密码信息
                admin.setPassword(null);
                return Result.success("更新成功", admin);
            } else {
                return Result.error("更新失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("更新个人信息失败：" + e.getMessage());
        }
    }

    /**
     * 修改密码
     */
    @PutMapping("/password")
    public Result changePassword(@RequestBody Map<String, String> params) {
        try {
            String oldPassword = params.get("oldPassword");
            String newPassword = params.get("newPassword");
            String confirmPassword = params.get("confirmPassword");

            if (oldPassword == null || oldPassword.trim().isEmpty()) {
                return Result.error("请输入原密码");
            }

            if (newPassword == null || newPassword.trim().isEmpty()) {
                return Result.error("请输入新密码");
            }

            if (newPassword.length() < 6) {
                return Result.error("新密码长度不能少于6位");
            }

            if (!newPassword.equals(confirmPassword)) {
                return Result.error("两次输入的密码不一致");
            }

            // 这里应该从JWT token中获取当前用户ID，暂时使用固定ID
            Integer adminId = 11; // 实际应该从SecurityContext或JWT中获取
            
            Admin admin = adminService.getById(adminId);
            if (admin == null) {
                return Result.error("用户不存在");
            }

            // 验证原密码 - 使用MD5加密验证
            String encryptedOldPassword = DigestUtils.md5DigestAsHex((oldPassword + SALT).getBytes());
            if (!encryptedOldPassword.equals(admin.getPassword())) {
                return Result.error("原密码错误");
            }

            // 更新密码 - 使用MD5加密
            String encryptedNewPassword = DigestUtils.md5DigestAsHex((newPassword + SALT).getBytes());
            admin.setPassword(encryptedNewPassword);
            boolean result = adminService.updateById(admin);
            
            if (result) {
                return Result.success("密码修改成功");
            } else {
                return Result.error("密码修改失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("修改密码失败：" + e.getMessage());
        }
    }

    /**
     * 更新头像
     */
    @PutMapping("/avatar")
    public Result updateAvatar(@RequestBody Map<String, String> params) {
        try {
            String avatar = params.get("avatar");
            if (avatar == null || avatar.trim().isEmpty()) {
                return Result.error("头像地址不能为空");
            }

            // 这里应该从JWT token中获取当前用户ID，暂时使用固定ID
            Integer adminId = 11; // 实际应该从SecurityContext或JWT中获取
            
            Admin admin = adminService.getById(adminId);
            if (admin == null) {
                return Result.error("用户不存在");
            }

            // 注意：avatar字段在数据库中不存在，暂时返回错误
            return Result.error("头像功能暂时不可用，需要在数据库admin表中添加avatar字段");
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("更新头像失败：" + e.getMessage());
        }
    }
}
